#ifndef RT_MATRIX3D
#define RT_MATRIX3D

class Matrix3D {
	public:
	double coord[3][3];

	// cria uma matrix nula 
	Matrix3D(void);

	Matrix3D(double m[3][3]);
	Matrix3D(Matrix3D* m);
	~Matrix3D();

	// seta as coordenadas da matrix 
	void setCoords(double m[3][3]);
	// seta a componente de coordenada (i-esima linha, j-esima coluna) da matrix 
	void setCoord(double newcoord, int i, int j);
	// retorna as coordenadas da matrix
	void getCoords(double m[3][3]);
	// retorna a componente de coordenadas (i,j) da matrix ( i -> linha ; j->coluna ) 
	double getCoord(int i, int j);
	// retorna a matrix identidade
	static Matrix3D* getIdentidade();
	// retorna a soma entre a matrix atual e a matrix passada
	Matrix3D* soma(Matrix3D *m);
	// retorna a subtracao matricial entre a matrix atual  e a passada
	Matrix3D* subtracao(Matrix3D *m);
	// retorna a multipolicacao matricial entre a matrix atual e a passada
	Matrix3D* multiplicacao(Matrix3D *m);
	// retorna a multiplicacao da matrix por um escalar 
	Matrix3D* multiplicacao(double escalar);
	// retorna o determinante da matriz atual
	double determinante();
	// retorna a matrix transposta da matrix atual
	Matrix3D* transposta();
	
	//imprime a matriz no terminal
	void print();

	
};

#include "matrix3d.cpp"

#endif
